/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import database.DBConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import util.PropertiesManager;

/**
 *
 * @author Igor
 */
public class ArtistaDAO implements OperacoesDAO {

    private Connection conexao;  
    
    public ArtistaDAO() throws ClassNotFoundException, SQLException {
        DBConnection db = new DBConnection();
        boolean teste = db.openConnection();
        if (teste == true) {
            conexao = db.getConexao();
        }
    }
    
    public ArtistaDAO(Connection conexao) {
        this.conexao = conexao;
    }
    
    @Override
    public void inserir(Object obj) throws SQLException {
    if (obj instanceof Artista) {
            String SQL = PropertiesManager.getProperty("insert.artista");            
            PreparedStatement st = conexao.prepareStatement(SQL);            
            Artista artista = (Artista) obj;
            // (id_artista, id_usuario, nome_artistico, descricao_livre) VALUES (s_sl_artista.nextval,?,?,?)
            
            st.setInt(1, artista.getId());
            st.setString(2, artista.getNomeArtistico());
            st.setString(3, artista.getDescricaoLivre());
            st.execute();
             
            try {
                ContaDAO conta = new ContaDAO();
                conta.inserir(pesquisarPorUsuario(artista));
                
            } catch (ClassNotFoundException ex) {
                System.out.println(ex);
            }
        }
    }

    @Override
    public boolean excluir(Object obj) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void editar(Object obj) throws SQLException {
        String SQL = PropertiesManager.getProperty("update.artista");            
        PreparedStatement st = conexao.prepareStatement(SQL);            
        Artista artista = (Artista) obj;

        st.setString(1, artista.getNomeArtistico());
        st.setString(2, artista.getDescricaoLivre());
        st.setInt(3, artista.getIdArtista());

        st.execute();      
    }

    @Override
    public ArrayList pesquisarTudo() throws SQLException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
    public Artista pesquisarPorUsuario(Usuario usuario) throws SQLException{
        
        Artista artista = null;
        if (usuario != null){
            String SQL = PropertiesManager.getProperty("selectByUserId.artista");
            PreparedStatement st = conexao.prepareStatement(SQL);
            st.setInt(1, usuario.getId());
            ResultSet res = st.executeQuery();

            while (res.next()) {
                artista = new Artista(
                    res.getInt("id_artista"),
                    res.getString("nome_artistico"), 
                    res.getString("descricao_livre"), 
                    usuario
                );
            }
            if (artista != null){
                ContaDAO contaDAO = new ContaDAO(conexao);
                artista.getContaArtista().creditar(contaDAO.getSaldoByArtista(artista));
                
                TagDAO tdao = new TagDAO(conexao);
                artista.setTags(tdao.pesquisaPorArtista(artista));
            }
        }
        return artista;
    }
    
    public Artista pesquisarPorNome(String nome) throws SQLException, ClassNotFoundException{
        
        Artista artista = null;
        if (nome != null){
            String SQL = PropertiesManager.getProperty("selectByName.artista");
            PreparedStatement st = conexao.prepareStatement(SQL);
            st.setString(1, nome);
            ResultSet res = st.executeQuery();
            
            UsuarioDAO udao = new UsuarioDAO();
            
            while (res.next()) {
                artista = new Artista(
                    res.getInt("id_artista"),
                    res.getString("nome_artistico"), 
                    res.getString("descricao_livre"), 
                    udao.pesquisarPorId(res.getInt("id_usuario"))
                );
            }            
            if (artista != null){
                ContaDAO contaDAO = new ContaDAO(conexao);
                artista.getContaArtista().creditar(contaDAO.getSaldoByArtista(artista));
            }
            System.out.println(artista);
        }
        return artista;
    }
    
    private Artista pesquisarTagsPorArtista(Artista artista){
        
        return artista;
    }
}
